﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Pms.Utils;
using System.Data.OracleClient;
using Biblioteca.Utils;
using Biblioteca.DataBase;

namespace SERIX.Classes
{
    public class CEvolucaoPropriedade
    {
        private string IDT_PROP;
        private string IDT_COM;
        private string AREA;
        private string NOME_PROP;
        private string LATITUDE;
        private string LONGITUDE;
        private string COD_INCRA;
        private string NOME_PRODUTOR;
        private string CPF;
        private string AREA_P_PERM;
        private string ENDER_PROP;
        private string NUMERO;
        private string COMPLEMENTO;
        private string BAIRRO;
        private string CEP;
        private string MUNICIPIO;
        private string COMUNIDADE;
        private string UF_PROP;
        private string IDT_BENEF;
        private string STATUS;
        private string AREA_ARRENDADA;
        private string CNPJ;
        private string IDT_EVOLUCAO;
        private string DT_INI_CADASTRO;
        private string DT_ATUAL_CADASTRO;
        private string USUARIO_INI;
        private string USUARIO_FIM;

        public CEvolucaoPropriedade()
        {

        }

        public CEvolucaoPropriedade(CPropriedades obj, CLogCadastro log)
        {
            this.IDT_PROP = obj.Idt_prop;
            this.IDT_COM = obj.Idt_com;
            this.AREA = obj.Area;
            this.NOME_PROP = obj.Nome_prop;
            this.LATITUDE = obj.Latitude;
            this.LONGITUDE = obj.Longitude;
            this.COD_INCRA = obj.Cod_incra;
            this.NOME_PRODUTOR = obj.Nome_produtor;
            this.CPF = obj.Cpf;
            this.AREA_P_PERM = obj.Area_p_perm;
            this.ENDER_PROP = obj.Ender_prop;
            this.NUMERO = obj.Numero;
            this.COMPLEMENTO = obj.Complemento;
            this.BAIRRO = obj.Bairro;
            this.CEP = obj.Cep;
            this.MUNICIPIO = obj.Municipio;
            this.COMUNIDADE = obj.Comunidade;
            this.UF_PROP = obj.Uf_prop;
            this.IDT_BENEF = obj.idt_benef;
            this.CNPJ = obj.cnpj;
            this.USUARIO_FIM = log.Usuario_fim;
            this.USUARIO_INI = log.Usuario_Ini;
            this.DT_ATUAL_CADASTRO = log.Log_Ultima;
            this.DT_INI_CADASTRO = log.Log_Primeiro;
        }

        #region Propriedades
        public string Idt_Evolucao
        {
            get { return this.IDT_EVOLUCAO; }
            set { this.IDT_EVOLUCAO = value; }
        }
        public string cnpj
        {
            get { return this.CNPJ; }
            set { this.CNPJ = value; }
        }

        /// <summary>
        /// Status da propriedade
        /// </summary>
        public string status
        {
            get { return this.STATUS; }
            set { this.STATUS = value; }
        }
        ///<sumary>
        ///Indentificador do beneficiario
        /// </sumary>
        public string idt_benef
        {
            get
            {
                return this.IDT_BENEF;
            }
            set
            {
                this.IDT_BENEF = value;
            }
        }
        /// <sumary>
        /// Identificador da propriedade
        /// <sumary>
        public string Idt_prop
        {
            get
            {
                return this.IDT_PROP;
            }
            set
            {
                this.IDT_PROP = value;
            }
        }
        /// <sumary>
        /// Identificador da comunidade
        /// <sumary>
        public string Idt_com
        {
            get
            {
                return this.IDT_COM;
            }
            set
            {
                this.IDT_COM = value;
            }
        }
        /// <sumary>
        /// Area da propriedade
        /// <sumary>
        public string Area
        {
            get
            {
                return this.AREA;
            }
            set
            {
                this.AREA = value;
            }
        }

        /// <sumary>
        /// Nome da propriedade
        /// <sumary>
        public string Nome_prop
        {
            get
            {
                return this.NOME_PROP;
            }
            set
            {
                this.NOME_PROP = value;
            }
        }
        /// <sumary>
        /// Latitude da propriedade
        /// <sumary>
        public string Latitude
        {
            get
            {
                return this.LATITUDE;
            }
            set
            {
                this.LATITUDE = value;
            }
        }
        /// <sumary>
        /// Longitude da propriedade
        /// <sumary>
        public string Longitude
        {
            get
            {
                return this.LONGITUDE;
            }
            set
            {
                this.LONGITUDE = value;
            }
        }
        /// <sumary>
        /// Codigo da propriedade cadastrada no INCRA
        /// <sumary>
        public string Cod_incra
        {
            get
            {
                return this.COD_INCRA;
            }
            set
            {
                this.COD_INCRA = value;
            }
        }

        /// <sumary>
        /// Nome do produtor
        /// <sumary>
        public string Nome_produtor
        {
            get
            {
                return this.NOME_PRODUTOR;
            }
            set
            {
                this.NOME_PRODUTOR = value;
            }
        }

        /// <sumary>
        /// Cpf do produtor
        /// <sumary>
        public string Cpf
        {
            get
            {
                return this.CPF;
            }
            set
            {
                this.CPF = value;
            }
        }

        /// <sumary>
        /// Codigo do nome do produtor
        /// <sumary>
        public string Area_p_perm
        {
            get
            {
                return this.AREA_P_PERM;
            }
            set
            {
                this.AREA_P_PERM = value;
            }
        }
        ///<sumary>
        ///Endereço da propriedade
        /// </sumary>
        public string Ender_prop
        {
            get
            {
                return this.ENDER_PROP;
            }
            set
            {
                this.ENDER_PROP = value;
            }
        }
        ///<sumary>
        ///Numero do endereço da propriedade
        /// </sumary>
        public string Numero
        {
            get
            {
                return this.NUMERO;
            }
            set
            {
                this.NUMERO = value;
            }
        }
        ///<sumary>
        ///Complementos do endereço da propriedade
        /// </sumary>
        public string Complemento
        {
            get
            {
                return this.COMPLEMENTO;
            }
            set
            {
                this.COMPLEMENTO = value;
            }
        }
        ///<sumary>
        ///Bairro referente ao endereço da propriedade
        /// </sumary>
        public string Bairro
        {
            get
            {
                return this.BAIRRO;
            }
            set
            {
                this.BAIRRO = value;
            }
        }
        ///<sumary>
        ///cep referente ao endereço da propriedade
        /// </sumary>
        public string Cep
        {
            get
            {
                return this.CEP;
            }
            set
            {
                this.CEP = value;
            }
        }
        ///<sumary>
        ///Municipio da propriedade
        /// </sumary>
        public string Municipio
        {
            get
            {
                return this.MUNICIPIO;
            }
            set
            {
                this.MUNICIPIO = value;
            }
        }
        ///<sumary>
        ///Comunidade referente a propriedade
        /// </sumary>
        public string Comunidade
        {
            get
            {
                return this.COMUNIDADE;
            }
            set
            {
                this.COMUNIDADE = value;
            }
        }
        ///<sumary>
        ///Estado onde é localizada a propriedade
        /// </sumary>
        public string Uf_prop
        {
            get
            {
                return this.UF_PROP;
            }
            set
            {
                this.UF_PROP = value;
            }
        }


        #endregion Propriedades

        /// <summary>
        /// Obtem a chave primaria da evolução
        /// </summary>
        private void ObterIdtEvolucao()
        {
            OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            string SQL = "SELECT COUNT(IDT_EVOLUCAO) FROM SRX_BENEFICIARIOS_EVOL";
            OracleCommand cmd = new OracleCommand(SQL, con);
            string retorno = "";
            try
            {
                con.Open();
                OracleDataReader read = cmd.ExecuteReader();
                while (read.Read())
                {
                    retorno = read[0].ToString();
                }
            }
            catch (Exception e)
            {
                if (e is OracleException)
                    throw new Exception(Biblio.ObterMensagem(((OracleException)e).Code, e.Message));
                else
                    throw new Exception(e.Message + " : " + "");
            }
            finally
            {
                con.Close();
            }
            IDT_EVOLUCAO = (int.Parse(retorno) + 1).ToString();
        }


        /// <summary>
        /// Recebe datatable e chama o método para inserir os bens da evolucao
        /// </summary>
        /// <param name="EvolucaoBens">DataTable</param>
        private void Bens_Propriedades_Evolucao(DataTable EvolucaoBens)
        {
            int linhas = EvolucaoBens.Rows.Count;
            int colunas = EvolucaoBens.Columns.Count;
            string[] Dados = new string[10];

            for (int i = 0; i < linhas; i++)
            {
                for (int j = 0; j < colunas; j++)
                {
                    Dados[j] = EvolucaoBens.Rows[i][j].ToString();
                }
                InserirBensEvolucao(Dados);
            }
        }
        /// <summary>
        /// Inserir os Bens dA PROPRIEDADE na Evolução
        /// </summary>
        /// <param name="Dados">Array com os dados referente a uma linha da tabela Bens_PROPRIEDADES</param>
        private void InserirBensEvolucao(string[] Dados)
        {
            OracleConnection conexao = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            string query = @"INSERT INTO SRX_BENS_PROPRIEDADES_EVOL (IDT_BENS_PROP, IDT_PROP, BENS_PROP, QUANT_PROP, ANO_PROP, TPO_VINC, IDT_DESC, IDT_EVOLUCAO)
                    VALUES (:IDT_BENS_PROP, :IDT_PROP, :BENS_PROP, :QUANT_PROP, :ANO_PROP, :TPO_VINC, :IDT_DESC, :IDT_EVOLUCAO)";
            OracleCommand cmd = new OracleCommand(query, conexao);


            cmd.Parameters.Add("IDT_BENS_PROP", OracleType.VarChar);
            cmd.Parameters.Add("IDT_PROP", OracleType.VarChar);
            cmd.Parameters.Add("BENS_PROP", OracleType.VarChar);
            cmd.Parameters.Add("QUANT_PROP", OracleType.VarChar);
            cmd.Parameters.Add("ANO_PROP", OracleType.VarChar);
            cmd.Parameters.Add("TPO_VINC", OracleType.Char);
            cmd.Parameters.Add("IDT_DESC", OracleType.VarChar);
            cmd.Parameters.Add("IDT_EVOLUCAO", OracleType.Number);

            cmd.Parameters["IDT_BENS_PROP"].Value = Dados[0];
            cmd.Parameters["IDT_PROP"].Value = Dados[2];
            cmd.Parameters["BENS_PROP"].Value = Dados[1];
            cmd.Parameters["QUANT_PROP"].Value = Dados[3];
            cmd.Parameters["ANO_PROP"].Value = Dados[4];
            cmd.Parameters["TPO_VINC"].Value = Dados[5];
            cmd.Parameters["IDT_DESC"].Value = Dados[6];
            cmd.Parameters["IDT_EVOLUCAO"].Value = IDT_EVOLUCAO;


            try
            {
                conexao.Open();
                cmd.ExecuteNonQuery();
            }
            catch
            {
                conexao.Close();
            }
            finally
            {
                conexao.Close();
            }
        }


        /// <summary>
        /// Inserindo a propriedade na evolucao
        /// </summary>
        private void Propriedades_Evolucao(string Login)
        {
            OracleCommand command = new OracleCommand();
            OracleTransaction trans;

            string SQL = @"insert into Serix.SRX_PROPRIEDADES_EVOL
			                  (IDT_EVOLUCAO, IDT_PROP, IDT_COM, AREA, NOME_PROP, LATITUDE, LONGITUDE, COD_INCRA, NOME_PRODUTOR, CPF, AREA_P_PERM, ENDER_PROP, NUMERO, COMPLEMENTO, BAIRRO, CEP, MUNICIPIO, COMUNIDADE, UF_PROP,Idt_Benef, STATUS, CNPJ, USUARIO_INI, USUARIO_FIM, DT_INI_CADASTRO, DT_ATUAL_CADASTRO)
						   values
						      (:IDT_EVOLUCAO, :IDT_PROP, :IDT_COM, :AREA, :NOME_PROP, :LATITUDE, :LONGITUDE, :COD_INCRA, :NOME_PRODUTOR, :CPF, :AREA_P_PERM, :ENDER_PROP, :NUMERO, :COMPLEMENTO, :BAIRRO, :CEP, :MUNICIPIO, :COMUNIDADE, :UF_PROP, :Idt_Benef, :STATUS, :CNPJ,:USUARIO_INI, :USUARIO_FIM, :DT_INI_CADASTRO, :DT_ATUAL_CADASTRO)";

            try
            {
                command.Connection = BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, Login, BiblioPMS.Demo);
                trans = command.Connection.BeginTransaction();
                command.Transaction = trans;
                command.CommandType = CommandType.Text;
                command.CommandText = SQL;

                command.Parameters.Add(new OracleParameter("IDT_EVOLUCAO", OracleType.Number));
                command.Parameters.Add(new OracleParameter("IDT_PROP", OracleType.Number));
                command.Parameters.Add(new OracleParameter("IDT_COM", OracleType.Number));
                command.Parameters.Add(new OracleParameter("AREA", OracleType.Number));
                //Nome da propriedade
                command.Parameters.Add(new OracleParameter("NOME_PROP", OracleType.VarChar));
                command.Parameters.Add(new OracleParameter("LATITUDE", OracleType.Number));
                command.Parameters.Add(new OracleParameter("LONGITUDE", OracleType.Number));
                command.Parameters.Add(new OracleParameter("COD_INCRA", OracleType.Number));
                command.Parameters.Add(new OracleParameter("NOME_PRODUTOR", OracleType.VarChar));
                command.Parameters.Add(new OracleParameter("CPF", OracleType.Char));
                command.Parameters.Add(new OracleParameter("AREA_P_PERM", OracleType.Number));
                command.Parameters.Add(new OracleParameter("ENDER_PROP", OracleType.VarChar));
                command.Parameters.Add(new OracleParameter("NUMERO", OracleType.Number));
                command.Parameters.Add(new OracleParameter("COMPLEMENTO", OracleType.VarChar));
                command.Parameters.Add(new OracleParameter("BAIRRO", OracleType.VarChar));
                command.Parameters.Add(new OracleParameter("CEP", OracleType.Number));
                command.Parameters.Add(new OracleParameter("MUNICIPIO", OracleType.VarChar));
                command.Parameters.Add(new OracleParameter("COMUNIDADE", OracleType.VarChar));
                command.Parameters.Add(new OracleParameter("UF_PROP", OracleType.Char));
                command.Parameters.Add(new OracleParameter("Idt_Benef", OracleType.Number));
                command.Parameters.Add(new OracleParameter("STATUS", OracleType.Char));
                command.Parameters.Add(new OracleParameter("CNPJ", OracleType.Char));
                command.Parameters.Add(new OracleParameter("USUARIO_INI", OracleType.VarChar));
                command.Parameters.Add(new OracleParameter("USUARIO_FIM", OracleType.VarChar));
                command.Parameters.Add(new OracleParameter("DT_INI_CADASTRO", OracleType.Timestamp));
                command.Parameters.Add(new OracleParameter("DT_ATUAL_CADASTRO", OracleType.Timestamp));

                command.Parameters["IDT_EVOLUCAO"].Value = this.IDT_EVOLUCAO;
                command.Parameters["IDT_PROP"].Value = this.IDT_PROP;
                command.Parameters["IDT_COM"].Value = this.IDT_COM;
                command.Parameters["AREA"].Value = Convert.ToDouble(this.AREA);
                command.Parameters["NOME_PROP"].Value = this.NOME_PROP;
                command.Parameters["NOME_PRODUTOR"].Value = this.NOME_PRODUTOR;
                command.Parameters["CPF"].Value = this.CPF;
                command.Parameters["AREA_P_PERM"].Value = Convert.ToDouble(this.AREA_P_PERM);
                command.Parameters["ENDER_PROP"].Value = this.ENDER_PROP;
                command.Parameters["NUMERO"].Value = Convert.ToInt32(this.NUMERO);
                command.Parameters["COMPLEMENTO"].Value = this.COMPLEMENTO;
                command.Parameters["BAIRRO"].Value = this.BAIRRO;
                command.Parameters["CEP"].Value = Convert.ToInt32(this.CEP);
                command.Parameters["MUNICIPIO"].Value = this.MUNICIPIO;
                command.Parameters["COMUNIDADE"].Value = this.COMUNIDADE;
                command.Parameters["UF_PROP"].Value = this.UF_PROP;
                command.Parameters["Idt_Benef"].Value = Convert.ToInt32(this.IDT_BENEF);
                command.Parameters["STATUS"].Value = "A";
                command.Parameters["CNPJ"].Value = CNPJ;
                command.Parameters["USUARIO_INI"].Value = this.USUARIO_INI;
                command.Parameters["USUARIO_FIM"].Value = this.USUARIO_FIM;
                command.Parameters["DT_INI_CADASTRO"].Value = this.DT_INI_CADASTRO;
                command.Parameters["DT_ATUAL_CADASTRO"].Value = this.DT_ATUAL_CADASTRO;
                command.Parameters["IDT_EVOLUCAO"].Value = this.IDT_EVOLUCAO;


                if (String.IsNullOrEmpty(this.LATITUDE))
                {
                    command.Parameters["LATITUDE"].Value = DBNull.Value;
                }
                else
                {
                    command.Parameters["LATITUDE"].Value = this.LATITUDE;
                }
                if (String.IsNullOrEmpty(this.LONGITUDE))
                {
                    command.Parameters["LONGITUDE"].Value = DBNull.Value;
                }
                else
                {
                    command.Parameters["LONGITUDE"].Value = this.LONGITUDE;
                }
                if (String.IsNullOrEmpty(this.COD_INCRA))
                {
                    command.Parameters["COD_INCRA"].Value = DBNull.Value;
                }
                else
                {
                    command.Parameters["COD_INCRA"].Value = this.COD_INCRA;
                }
                command.ExecuteNonQuery();
                command.Parameters.Clear();
                command.Transaction.Commit();
            }
            catch (Exception e)
            {
                command.Transaction.Rollback();

                if (e is OracleException)
                    throw new Exception(Biblio.ObterMensagem(((OracleException)e).Code, e.Message));
                else
                    throw new Exception(e.Message + " : " + "");
            }
        }

        public void Inserir(string Login, DataTable Bens)
        {
            ObterIdtEvolucao();
            Propriedades_Evolucao(Login);
            Bens_Propriedades_Evolucao(Bens);
        }

        /// <summary>
        /// Método para preencher o gridview na pagina de beneficiarios no caso da evolução
        /// </summary>
        /// <param name="idtevolucao">Identificador que liga a tabela dos bens_evol com Beneficiarios_evol</param>
        /// <returns>Daratable com os bens de acordo com a data regsitrada</returns>
        static public DataTable CarregaGridBens(string idtevolucao)
        {
            string sql = "SELECT * FROM SRX_BENS_PROPRIEDADES_EVOL WHERE IDT_EVOLUCAO = :IDT_EVOLUCAO AND DATA_FIM IS NULL";
            OracleConnection conexao = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            Query qy = new Query(conexao, sql);
            DataTable datatable = null;
            try
            {
                conexao.Open();
                qy.AdicionarParametro("IDT_EVOLUCAO", DbType.String, idtevolucao);
                qy.Executar();
                datatable = qy.ObterDataTable();
            }
            catch { }
            finally
            {
                conexao.Close();
            }
            return datatable;
        }


        static public CPropriedades PesquisaporCodigo(string idt, string login)
        {
            CPropriedades obj;
            string SQL = @"SELECT *
                            FROM  Serix.SRX_PROPRIEDADES_EVOL 
                            WHERE IDT_EVOLUCAO = :IDT_EVOLUCAO";
            Query qy = null;
            try
            {
                qy = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), SQL);
                qy.AdicionarParametro(":IDT_EVOLUCAO", DbType.String, idt);

                qy.Executar();
                obj = new CPropriedades(qy.ObterCampo("IDT_PROP"), qy.ObterCampo("IDT_COM"), qy.ObterCampo("AREA"), qy.ObterCampo("NOME_PROP"), qy.ObterCampo("LATITUDE"), qy.ObterCampo("LONGITUDE"), qy.ObterCampo("COD_INCRA"), qy.ObterCampo("NOME_PRODUTOR"), qy.ObterCampo("CPF"), qy.ObterCampo("AREA_P_PERM"), qy.ObterCampo("ENDER_PROP"), qy.ObterCampo("NUMERO"), qy.ObterCampo("COMPLEMENTO"), qy.ObterCampo("BAIRRO"), qy.ObterCampo("CEP"), qy.ObterCampo("MUNICIPIO"), qy.ObterCampo("COMUNIDADE"), qy.ObterCampo("UF_PROP"), qy.ObterCampo("Idt_Benef"), qy.ObterCampo("CNPJ"));
            }
            catch
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                {
                    qy.FecharConexao();
                }
                return new CPropriedades();
            }
            finally
            {
                qy.FecharConexao();
            }
            return obj;
        }
    }
}
